/**
 *	UNIX系统中，目录是一个文件，它包含一个文件名列表和这些文件的i结点索引号，
 *	而i结点存储的是文件的相关信息（即一个stat结构）
 *
 *	也就是说一个目录可以看做是一个结构数组，该数组的每个元素是一个direct结构，结构包含一个文件名和该文件的i结点索引号
 *
 *	由于目录是一个文件，那么就可以使用open函数和read函数打开，传入目录名利用open函数得到文件描述符
 *
 *	传入文件描述符利用read函数每次从目录中读取出文件名和索引号（即一个direct结构）
 *
 *	由于目录中每个文件的文件名是没有空字符的，但是我们读取每个文件时，需要在文件名后加空字符，
 *	因此另外声明一个与direct结构类似的结构Dirent
**/
#ifndef __DIRENT_H__
#define __DIRENT_H__

#include <sys/stat.h>

#ifndef DIRSIZ
#define DIRSIZ		14
#endif
#define MAX_PATH 	1024
#define NAME_MAX	14	// longest filename component;
				// system-dependent
struct direct
{
	ino_t d_ino;		// 索引号
	char d_name[DIRSIZ];	// 没有空字符的名
};

typedef struct 			// portable directory entry
{		
	long ino;		// inode number
	char name[NAME_MAX+1];	// name + '\0' terminator		
}Dirent;

typedef struct 			// minimal DIR: no buffering, etc
{
	int fd;			// file descriptor for the directory
	Dirent d;		// the directory entry
}DIR;

void fsize(char *);
DIR *opendir(char *dirname);
void closedir(DIR *dp);
Dirent *readdir(DIR *dp);
void dirwalk(char *, void (*fun)(char *));

#endif
